package ljl.alg.wangzheng_camp.round1.array_and_list;

import commons.ListNode;

/**
 * 这个垃圾题居然有三种解法
 * */
public class _203_remove_list_e {
    
    /**
     * 我喜欢简单题
     * */
    public ListNode removeElements2(ListNode head, int val) {
        ListNode dummy = new ListNode(0, head);
        ListNode pre = dummy, cur = head;
        while (cur != null) {
            if (cur.val == val) {
                pre.next = cur.next;
            } else {
                pre = cur;
            }
            cur = cur.next;
            
        }
        return dummy.next;
    }
    
    /**
    * 我没想到这个题还能玩出花来
    * */
    public ListNode removeElements(ListNode head, int val) {
        if (head == null) return null;
        head.next = removeElements(head.next, val);
        return head.val == val ? head.next : head;
    }
    
    // 这个解法省去一个变量，但是更慢了
    public ListNode removeElements0(ListNode head, int val) {
        ListNode dummy = new ListNode(0, head);
        ListNode pre = dummy;
        while (pre.next != null) {
            if (pre.next.val == val) {
                pre.next = pre.next.next;
            } else {
                pre = pre.next;
            }
        }
        return dummy.next;
    }
}
